package com.rykj.qxj.server.services;

import java.util.List;
import java.util.Map;


import com.github.pagehelper.PageInfo;
import com.rykj.qxj.server.common.exception.AddFieldDuplicatePenNameException;
import com.rykj.qxj.server.common.exception.AddFieldListIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.ApiManageIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.ApiManageSaveExceptiuon;
import com.rykj.qxj.server.common.exception.ApiOfTableListIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.ApiOfTableOfFieldIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.ApiOfTableSaveExceptiuon;
import com.rykj.qxj.server.common.exception.ApiRequestParamDuplicateBySqlException;
import com.rykj.qxj.server.common.exception.ApiRequestParamDuplicatePenNameException;
import com.rykj.qxj.server.common.exception.ApiRequestParamListIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.ApiResponseParamDuplicateBySqlException;
import com.rykj.qxj.server.common.exception.ApiResponseParamDuplicatePenNameException;
import com.rykj.qxj.server.common.exception.ApiResponseParamListIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.ApiStatusDisableExceptiuon;
import com.rykj.qxj.server.common.exception.ApiVersionManageIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.ApiVersionManageaveExceptiuon;
import com.rykj.qxj.server.common.exception.ApiVersionStatusDisableExceptiuon;
import com.rykj.qxj.server.common.exception.ApplyIdIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.FileApiCatalogListIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.FileApiNameListIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.NameByUrlIsDupExceptiuon;
import com.rykj.qxj.server.common.exception.NameByUrlIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.RequestParamAndUpdateFieldDuplicatePenNameExceptiuon;
import com.rykj.qxj.server.common.exception.SqlTempletIsNullExceptiuon;
import com.rykj.qxj.server.common.exception.UpdateFieldDuplicatePenNameException;
import com.rykj.qxj.server.common.exception.UpdateFieldListIsNullExceptiuon;
import com.rykj.qxj.server.model.entity.ApiManage;
import com.rykj.qxj.server.model.param.ApiManagerOutsideUrlParams;
import com.rykj.qxj.server.model.param.ApiManagerParams;

import net.sf.jsqlparser.JSQLParserException;

public interface IApiManageService {
	/**
	 * 
	 * @Description:应用管理员保存接口信息 
	 * @param:  apiManagerParams 接口所有参数    
	 * @date:   2019年5月6日 下午5:53:32  
	 * @author: wangshunyi    
	 * @throws
	 */
	void saveApiManage(ApiManagerParams apiManagerParams) throws ApiManageSaveExceptiuon, ApiVersionManageIsNullExceptiuon, ApiOfTableListIsNullExceptiuon, ApiOfTableOfFieldIsNullExceptiuon, ApiOfTableSaveExceptiuon, ApiRequestParamListIsNullExceptiuon, ApiResponseParamListIsNullExceptiuon, ApiManageIsNullExceptiuon, ApiVersionManageaveExceptiuon, UpdateFieldListIsNullExceptiuon, AddFieldListIsNullExceptiuon, ApplyIdIsNullExceptiuon, ApiRequestParamDuplicatePenNameException, ApiResponseParamDuplicatePenNameException, UpdateFieldDuplicatePenNameException, AddFieldDuplicatePenNameException, RequestParamAndUpdateFieldDuplicatePenNameExceptiuon, JSQLParserException, SqlTempletIsNullExceptiuon, ApiRequestParamDuplicateBySqlException, ApiResponseParamDuplicateBySqlException;
	/**
	 * 
	 * @Description:后台管理员保存接口信息   
	 * @param:  apiManagerParams 接口所有参数   
	 * @date:   2019年5月6日 下午5:54:38  
	 * @author: wangshunyi    
	 * @throws
	 */
	void adminSaveApiManage(ApiManagerParams apiManagerParams) throws ApiManageSaveExceptiuon, ApiVersionManageIsNullExceptiuon, ApiOfTableListIsNullExceptiuon, ApiOfTableOfFieldIsNullExceptiuon, ApiOfTableSaveExceptiuon, ApiRequestParamListIsNullExceptiuon, ApiResponseParamListIsNullExceptiuon, ApiManageIsNullExceptiuon, ApiVersionManageaveExceptiuon, UpdateFieldListIsNullExceptiuon, AddFieldListIsNullExceptiuon, ApplyIdIsNullExceptiuon, ApiRequestParamDuplicatePenNameException, ApiResponseParamDuplicatePenNameException, UpdateFieldDuplicatePenNameException, AddFieldDuplicatePenNameException, RequestParamAndUpdateFieldDuplicatePenNameExceptiuon, JSQLParserException, SqlTempletIsNullExceptiuon, ApiRequestParamDuplicateBySqlException, ApiResponseParamDuplicateBySqlException, FileApiCatalogListIsNullExceptiuon, FileApiNameListIsNullExceptiuon,NameByUrlIsNullExceptiuon,NameByUrlIsDupExceptiuon;
	/**
	 * @throws Exception 
	 * 
	 * @Description:后台管理员更新接口信息 
	 * @param:  apiManagerParams 接口参数信息，必须有接口版本的id   
	 * @date:   2019年5月6日 下午5:55:18  
	 * @author: wangshunyi    
	 * @throws
	 */
	void adminUpdateApiManage(ApiManagerParams apiManagerParams) throws ApiVersionManageaveExceptiuon, ApiOfTableListIsNullExceptiuon, ApiOfTableOfFieldIsNullExceptiuon, ApiRequestParamListIsNullExceptiuon, ApiResponseParamListIsNullExceptiuon, UpdateFieldListIsNullExceptiuon, AddFieldListIsNullExceptiuon, ApiRequestParamDuplicatePenNameException, ApiResponseParamDuplicatePenNameException, UpdateFieldDuplicatePenNameException, AddFieldDuplicatePenNameException, RequestParamAndUpdateFieldDuplicatePenNameExceptiuon, SqlTempletIsNullExceptiuon, JSQLParserException, ApiRequestParamDuplicateBySqlException, ApiResponseParamDuplicateBySqlException, Exception;
	/**
	 * @throws ApiVersionStatusDisableExceptiuon 
	 * @throws ApiStatusDisableExceptiuon 
	 * 
	 * @Description:应用管理员更新接口信息 
	 * @param:  apiManagerParams 接口参数信息，必须有接口版本的id   
	 * @date:   2019年5月6日 下午5:55:18  
	 * @author: wangshunyi    
	 * @throws
	 */
	void updateApiManage(ApiManagerParams apiManagerParams) throws ApiVersionManageaveExceptiuon, ApiOfTableListIsNullExceptiuon, ApiOfTableOfFieldIsNullExceptiuon, ApiRequestParamListIsNullExceptiuon, ApiResponseParamListIsNullExceptiuon, UpdateFieldListIsNullExceptiuon, AddFieldListIsNullExceptiuon, ApiRequestParamDuplicatePenNameException, ApiResponseParamDuplicatePenNameException, UpdateFieldDuplicatePenNameException, AddFieldDuplicatePenNameException, RequestParamAndUpdateFieldDuplicatePenNameExceptiuon, SqlTempletIsNullExceptiuon, JSQLParserException, ApiRequestParamDuplicateBySqlException, ApiResponseParamDuplicateBySqlException, ApiStatusDisableExceptiuon, ApiVersionStatusDisableExceptiuon;
	/**
	 * 
	 * @Description:根据接口的id删除接口基本信息  
	 * @param:  id 接口基本信息id    
	 * @date:   2019年5月6日 下午5:57:04  
	 * @author: wangshunyi    
	 */
	void deleteApiManageById(Integer id);
	/**
	 * 
	 * @Description: 根据接口基本信息的id查询接口基本信息   
	 * @param:  id 接口基本信息id   
	 * @return:  ApiManage 返回接口基本信息对象
	 * @date:   2019年5月6日 下午5:57:56  
	 * @author: wangshunyi    
	 */
	ApiManage selectByPrimaryKey(Integer id);
	/**
	 * 
	 * @Description: 应用管理员的接口分页获取接口列表   
	 * @date:   2019年5月6日 下午5:59:21  
	 * @author: wangshunyi    
	 * @throws
	 */
	PageInfo selectPageBySearchParams(Integer pageNum, Integer pageSize, String name, String url,Integer applyId);
	/**
	 * 
	 * @Description:根据请求的url查询接口基本信息  
	 * @param: url请求的url     
	 * @date:   2019年5月6日 下午6:03:59  
	 * @author: wangshunyi    
	 * @throws
	 */
	ApiManage selectApiManageAndApiversionIdByApiIdAndVersionStatusAndVerifyStatusAndDeleteStatus(String url);
	/**
	 * 
	 * @Description:查询审核通过的接口分页数据   
	 * @date:   2019年5月6日 下午6:37:39  
	 * @author: wangshunyi    
	 * @throws
	 */
	
	PageInfo selectVerifyPassApiManagePageBySearchParams(Integer pageNum, Integer pageSize, String name,
			String apiTypeId,String apiType);
	/**
	 * 
	 * @Description:查询审核分页数据   
	 * @date:   2019年5月6日 下午6:38:34  
	 * @author: wangshunyi    
	 * @throws
	 */
	PageInfo selectVerifyApiManagePageBySearchParams(Integer pageNum, Integer pageSize, String applyName,
			String verifyStatus, String changeType, String apiName);
	/**
	 * 
	 * @Description: 查询门户显示的接口列表数据   只是显示主题库中的接口数据
	 * @date:   2019年5月6日 下午6:40:03  
	 * @author: wangshunyi    
	 * @throws
	 */
	PageInfo selectDataApiShowList(Integer pageNum, Integer pageSize, Integer apiTypeId, String useOrder,
			String updateTimeOrder);
	/**
	 * 
	 * @Description: 根据版本的id删除对应版本号的接口信息
	 * @date:   2019年5月6日 下午6:41:08  
	 * @author: wangshunyi    
	 * @throws
	 */
	 void deleteApply(Integer apiVersionId);
	 /**
	  * 
	  * @Description: 应用管理员变更记录分页列表
	  * @date:   2019年5月6日 下午6:41:51  
	  * @author: wangshunyi    
	  * @throws
	  */
	 PageInfo selectChangeRecordByApiId(Integer  pageNum,Integer pageSize,Integer apiId,String verifyStatus,String changeType);
	 /**
	 * @throws Exception 
	  * 
	  * @Description: 后台管理员更新第三方接口 
	  * @date:   2019年5月6日 下午6:43:32  
	  * @author: wangshunyi     
	  * @throws
	  */
	 void updateApiManageOutsideUrl(ApiManagerOutsideUrlParams apiManagerOutsideUrlParams) throws ApiVersionManageaveExceptiuon, Exception;
	/**
	 * @throws ApplyIdIsNullExceptiuon 
	 * 
	 * @Description:后台管理员保存第三方接口   
	 * @date:   2019年5月6日 下午6:44:31  
	 * @author: wangshunyi    
	 * @throws
	 */
	 void saveApiManageOutsideUrl(ApiManagerOutsideUrlParams apiManagerOutsideUrlParams) throws ApiManageIsNullExceptiuon, ApiManageSaveExceptiuon, ApiVersionManageIsNullExceptiuon, ApiVersionManageaveExceptiuon, ApplyIdIsNullExceptiuon;
	 /**
	  * 
	  * @Description: 根据输入的url校验url的重复性  
	  * @date:   2019年5月6日 下午6:45:10  
	  * @author: wangshunyi    
	  * @throws
	  */
	 boolean validateApiUrl(String url);
	 /**
	  * 
	  * @Description: 根据接口id查询接口信息
	  * @date:   2019年5月6日 下午6:57:51  
	  * @author: wangshunyi    
	  * @throws
	  */
	ApiManage selectApiManageByPrimaryKey(Integer apiId);
	 /**
	  * 
	  * @Description: 根据接口的Id查询接口版本的详情  
	  * @date:   2019年5月6日 下午6:45:52  
	  * @author: wangshunyi    
	  * @throws
	  */
	 Map<String, Object> getApiVersiondetails(Integer apiId);
	 /**
	 * @throws Exception 
	  * 
	  * @Description: 对接口的禁用或者启用操作  
	  * @date:   2019年5月6日 下午6:46:34  
	  * @author: wangshunyi    
	  * @throws
	  */
	 void enableOrDisableOperation(Integer apiId, String status) throws Exception;
	 /**
	  * 
	  * @Description: 根据id和版本号查询接口详情
	  * @date:   2019年5月6日 下午6:47:06  
	  * @author: wangshunyi    
	  * @throws
	  */
	 Map<String,Object> getApiManageDetails(Integer id,String versionCount);
	/**
	 * 获取系统当前可用接口清单
	 * @return
	 */
	 List<Map<String,Object>> findAllApi();
	 /**
	  * 
	  * @Description:根据访问的地址查询接口的基本信息   
	  * @param:url 接口地址      
	  * @date:   2019年5月21日 上午11:54:08  
	  * @author: wangshunyi    
	  * @throws
	  */
	 ApiManage selectApiManageByUrl(String url);
	 /**
	  * 
	  * @Description: 根据接口的url和接口版本的状态查询  
	  * @date:   2019年5月21日 下午2:31:49  
	  * @author: wangshunyi    
	  * @throws
	  */
	ApiManage selectApiManageAndApiversionByUrlAndEnable(String requestURI);
	
	Map<String,Object> apiTotal();

	PageInfo getApiByTableId(Integer pageNum, Integer pageSize, Integer tableId);

	Integer selectDataApiShowListCount(Integer apiTypeId);
	
	PageInfo searchApiListByName(Integer pageNum, Integer pageSize, String name);

    List<Map<String, String>> getAppKeyApiUrls();

    List<ApiManage> getApiInfoByIds(String[] apiId);

	PageInfo getApiVersionByTableId(Integer pageNum, Integer pageSize, Integer tableId);
}
